home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power Programmierung
/
Power-Programmierung (Tewi)(1994).iso
/
magazine
/
pctchnqs
/
1992
/
number1
/
fileview.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1992-01-04
|
5KB
|
185 lines
/*---------------------------------------------------------*/
/* */
/* Turbo Vision 1.0 */
/* Turbo Vision FileViewer Demo Support File */
/* Copyright (c) 1991 by Borland International */
/* */
/*---------------------------------------------------------*/
#define Uses_MsgBox
#define Uses_TKeys
#define Uses_TScroller
#define Uses_TDrawBuffer
#define Uses_TRect
#define Uses_TProgram
#define Uses_TDeskTop
#define Uses_TStreamableClass
#include <tv.h>
__link(RScroller)
__link(RScrollBar)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <fstream.h>
// PRFILE CHANGE: removed #include "tvcmds.h".
#include "fileview.h"
// PRFILE CHANGE: added #include "prfile.h".
#include "prfile.h"
const char * const TFileViewer::name = "TFileViewer";
TFileViewer::TFileViewer( const TRect& bounds,
TScrollBar *aHScrollBar,
TScrollBar *aVScrollBar,
const char *aFileName) :
TScroller( bounds, aHScrollBar, aVScrollBar )
{
growMode = gfGrowHiX | gfGrowHiY;
isValid = True;
fileName = 0;
readFile( aFileName );
// PRFILE CHANGE: added enable of cmPrintFile.
if (!filesOpen++)
enableCommand(cmPrintFile);
}
TFileViewer::~TFileViewer()
{
// PRFILE CHANGE: added disable of cmPrintFile.
if (!--filesOpen)
disableCommand(cmPrintFile);
delete fileName;
delete fileLines;
}
void TFileViewer::draw()
{
char *p;
ushort c = getColor(0x0301);
for( int i = 0; i < size.y; i++ )
{
TDrawBuffer b;
b.moveChar( 0, ' ', c, size.x );
if( delta.y + i < fileLines->getCount() )
{
char s[maxLineLength+1];
p = (char *)( fileLines->at(delta.y+i) );
if( p == 0 || strlen(p) < delta.x )
s[0] = EOS;
else
{
strncpy( s, p+delta.x, size.x );
if( strlen( p + delta.x ) > size.x )
s[size.x] = EOS;
}
b.moveStr( 0, s, c );
}
writeBuf( 0, i, size.x, 1, b );
}
}
void TFileViewer::scrollDraw()
{
TScroller::scrollDraw();
draw();
}
void TFileViewer::readFile( const char *fName )
{
delete fileName;
limit.x = 0;
fileName = newStr( fName );
fileLines = new TLineCollection(5, 5);
ifstream fileToView( fName );
if( !fileToView )
{
messageBox( "Invalid drive or directory", mfError | mfOKButton );
isValid = False;
}
else
{
char line[maxLineLength+1];
while( !fileToView.eof() && fileToView.get( line, sizeof line ) != 0 )
{
char c;
fileToView.get(c); // grab trailing newline
limit.x = max( limit.x, strlen( line ) );
fileLines->insert( newStr( line ) );
}
isValid = True;
}
limit.y = fileLines->getCount();
}
void TFileViewer::setState( ushort aState, Boolean enable )
{
TScroller::setState( aState, enable );
if( enable && (aState & sfExposed) )
setLimit( limit.x, limit.y );
}
Boolean TFileViewer::valid( ushort )
{
return isValid;
}
void *TFileViewer::read(ipstream& is)
{
char *fName;
TScroller::read(is);
fName = is.readString();
fileName = 0;
readFile(fName);
delete fName;
return this;
}
void TFileViewer::write(opstream& os)
{
TScroller::write(os);
os.writeString(fileName);
}
TStreamable *TFileViewer::build()
{
return new TFileViewer( streamableInit );
}
TStreamableClass RFileView( TFileViewer::name,
TFileViewer::build,
__DELTA(TFileViewer)
);
static int winNumber = 0;
TFileWindow::TFileWindow( const char *fileName ) :
// PRFILE CHANGE: changed winNumber++ to ++winNumber (bug).
TWindow( TProgram::deskTop->getExtent(), fileName, ++winNumber ),
TWindowInit( &TFileWindow::initFrame )
{
options |= ofTileable;
TRect r( getExtent() );
r.grow(-1, -1);
insert(new TFileViewer( r,
standardScrollBar(sbHorizontal | sbHandleKeyboard),
standardScrollBar(sbVertical | sbHandleKeyboard),
fileName) );
}